package io.marmot.util;


import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/***
 * @author wanglijun
 * 日期工具类
 */
@Slf4j
public class DateUtils {

    public static final String YYYY_MM_DD_HH_MM_SS="yyyy-MM-dd HH:mm:ss";

    /***
     * 构建工具
     */
    private static  ThreadLocal<Map<String,DateFormat>> dateFormatThreadLocal=new ThreadLocal<> ();

    /***
     *  构建
     * @param pattern 日期格式
     * @return
     */
    private  static  DateFormat  get(String pattern){
        Map<String,DateFormat> map=dateFormatThreadLocal.get ();
        if(map==null){
            map=new ConcurrentHashMap<> ();
        }

        if(map.containsKey (pattern)){
           return map.get (pattern);
        }

        DateFormat dataFormat=new SimpleDateFormat (pattern, Locale.getDefault ());
        map.put (pattern,dataFormat);
        dateFormatThreadLocal.set (map);
        return dataFormat;
    }


    /***
     * 日期转化字符串
     * @param date 日期
     * @param pattern 格式
     * @return String 字符串
     */
    public static String format(Date date,String pattern){
         if(date==null|| StringUtils.isEmpty (pattern)){
             return StringUtils.EMPTY;
         }
         return get(pattern).format (date);

    }

    /***
     * 字符串转为日期
     * @param date  字符串
     * @param pattern  格式
     * @return Date 日期
     */
    public static Date parse(String date,String pattern)  {
        try {
            return get (pattern).parse (date);
        } catch (ParseException e) {
            log.error (e.getMessage (),e);
        }
        return null;
    }
}
